#include <iostream>
#include <string>
#include <stdlib.h>     /*标准函数库定义*/
#include <unistd.h>     /*Unix 标准函数定义*/
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>      /*文件控制定义*/
#include <termios.h>    /*PPSIX 终端控制定义*/
#include <errno.h>
#include <cstdio>
#include <cstring>
#include <functional>

#include <unistd.h>
#include <thread>
#include <vector>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/tcp.h>
#include <netdb.h>
#include <arpa/inet.h>
#include <ctime>
#include "threadpool.h"
//#include "wifishield.h"
#define BUF_SIZE 256
const std::string Prefix = "##";

#ifndef TCPSERVER
#define TCPSERVER

class TcpServer{
public:
    typedef std::function<int(std::string &)> GetSigns;
    typedef std::function<int(std::string)> SendSignsType;
    //typedef int(*GetSigns)(std::string);
    TcpServer(int =4999);
    ~TcpServer();
    void start(GetSigns, SendSignsType);
    void stop();
    void SendData();
    void ReadData();

    int port_;                    //服务器端口,默认4999
    int sServer;                 //服务器套接字
    int bindfp;                  //客户端套接字
    sockaddr_in addrServ;     //客户端套接字
    int retVal;                  //客户端套接字
    bool running_;

    GetSigns getSigns;
    SendSignsType sendSignsType;
    int * client;                //客户端文件描述符,为线程间共享内存,在SendData函数里释放
    int * dataType;             //数据类型,为线程间共享内存,在SendData函数里释放
    sockaddr_in addrClient;   //客户端地址
};

enum DataType
{
    HEART = 1,
    TEMP = 2
};

#endif // TCPSERVER


/*void ReadData(int*, int *, sockaddr_in);
void SendData(int *, int *);
void TcpServer(int);*/

